#ifndef JSON_HPP
#define JSON_HPP

#include "general.h"
#include "cJSON.h"
#include "BossApp.hpp"
#include "Function.hpp"

using namespace std;

class Json{

public:

	void Json_data_read(char *buff){//json数据读取
		json = cJSON_Parse(buff);
		json_data = cJSON_Print(json);

		if(!json_data){
			cout << "Not found json_data" << endl;
		}
		else{
			cout << "data:" << json_data << endl;
		}

		free(json_data);
		cJSON_Delete(json);
	}

	void Json_data_analysis(int comm_fd, char *buff){//json数据解析
		json = cJSON_Parse(buff);

		//包头解析
		tur = cJSON_GetObjectItem(json,"Turban");
		if(tur == NULL){
			cout << "Node is not Json" << endl;
			cJSON_Delete(json);
			return;
		}

		//功能码解析
		func = cJSON_GetObjectItem(json,"Function");
		if(func == NULL){
			cout << "Function node == NULL" << endl;
			cJSON_Delete(json);
			return;
		}

		//数据内容解析
		BossApp bossApp;
		data = cJSON_GetObjectItem(json,"DataArray");
		if(data == NULL){
			cout << "DataArray node == NULL" << endl;
		}
		else{
			array_size = cJSON_GetArraySize(data);    //获取数组大小
			for(int i = 0; i < array_size; i++){
				arrayData = cJSON_GetArrayItem(data, i);
			}
		}

		switch(func->valueint){
		case LOG_IN:   //登录
			bossApp.Account_login(comm_fd, arrayData);
			break;
		case REGISTER:   //注册
			bossApp.Account_registration(comm_fd, arrayData);
			break;
		case CHANGE_PASSWORD:   //修改密码
			bossApp.Revise_account_password(comm_fd, arrayData);
			break;
		case RETRIEVE_PASSWORD:   //找回密码
			bossApp.Retrieve_password(comm_fd, arrayData);
			break;
		case BIND_MACHINE:   //注册柜机
			bossApp.Band_machine(comm_fd, arrayData);
			break;
		case CHANGE_MACHINE_PASSWORD:  //修改柜机密码
			bossApp.Revise_machine_password(comm_fd, arrayData);
			break;
		case REMOVE_MACHINE:  //移除柜机
			bossApp.Remove_machine(comm_fd, arrayData);
			break;
		case CHOOSE_MAC:  //选择柜机
			bossApp.Choise_machine(comm_fd, arrayData);
			break;
		case CHECK_COMMODITY:   //查看商品信息
			bossApp.Check_commodity(comm_fd, arrayData);
			break;
		case ADD_COMMODITY_DATA:   //增加商品信息
			bossApp.Add_commodity(comm_fd, arrayData);
			break;
		case CHANGE_COMMODITY_DATA:   //修改商品信息
			bossApp.Change_commodity(comm_fd, arrayData);
			break;
		case REMOVE_COMMODITY_DATA:   //删除商品信息
			bossApp.Remove_commodity(comm_fd, arrayData);
			break;
		case CHECK_COMMODITY_SALE:   //查看柜机销售额
			bossApp.Check_commodity_sale(comm_fd, arrayData);
			break;
		default:
			break;
		}

	cJSON_Delete(json);
	return;
	}

private:
	char *json_data = NULL;
	int array_size = 0;
	cJSON *json;//json数据
	cJSON *tur;//固定头
	cJSON *func;//功能码
	cJSON *data;//数据内容
	cJSON *arrayData;//数组内容
	cJSON *acc;//帐号
	cJSON *pas;//密码
};


#endif
